package com.yc.springmvc;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

public class MyWebApplnit implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {


        /*创建一个 AnnotationConfigWebApplicationContext 对象 cxt，用于注册配置类 MVCConfig.class。
        这个配置类通常包含了Spring MVC的相关配置，如控制器、视图解析器等。

        创建一个 DispatcherServlet 对象 dispatcherServlet，并将 cxt 强制转换为 WebApplicationContext
        类型传入。DispatcherServlet 是Spring MVC的核心组件，用于处理所有的HTTP请求。

        使用 servletContext 的 addServlet 方法添加名为 "app" 的 dispatcherServlet。
        这里的 "app" 是Servlet的名称，可以用来在Servlet容器中唯一标识这个Servlet。

        设置 dispatcherServlet 的启动顺序为 1，表示在Servlet容器启动时就加载并初始化这个Servlet。

        使用 addMapping("/") 方法将这个Servlet映射到所有的请求地址。这意味着所有的HTTP请求都会由这个Servlet来处理。*/

        AnnotationConfigWebApplicationContext cxt = new AnnotationConfigWebApplicationContext();
        cxt.register(MVCConfig.class);
        //DispatcherServlet 是Spring MVC的核心组件，用于处理所有的HTTP请求。
        DispatcherServlet dispatcherServlet = new DispatcherServlet((WebApplicationContext) cxt);

       // MyDispatchServlet dispatcherServlet = new MyDispatchServlet();
        ServletRegistration.Dynamic registration = servletContext.addServlet("app", dispatcherServlet);
        registration.setLoadOnStartup(1);
        registration.addMapping("/");  // 映射所有地址


        // 添加文件上传配置
        MultipartConfigElement mc = new MultipartConfigElement("/");//"/" 表示临时文件存放目录为根目录，
        mc.getLocation();     // 临时文件存放目录
        mc.getMaxFileSize();  // 最大文件大小
        mc.getMaxRequestSize();  // 最大請求大小(总体大小)
        mc.getFileSizeThreshold();  // 保存临时文件的文件大小边界值
        //将 MultipartConfigElement 对象 mc 设置到某个注册对象 registration 中，以应用这些文件上传配置。
        registration.setMultipartConfig(mc);


    }
}
